package com.itheima._02字节缓冲流;

import java.io.*;

/**
    目标：字节流与字节缓冲流等性能统计分析。

    （1）使用低级字节流：一个一个字节的复制。
    （2）使用低级字节流：一个一个数组的复制。
    （3）使用缓冲字节流：一个一个字节的复制。
    （4）使用缓冲字节流：一个一个数组的复制。

     D:\itcast\班级\Java就业113期\就业班-day09-字节流、字符流\12.字符输入流.wmv

    总结：
        缓冲流结合字节数组读取数据的性能是最高的！
 */
public class CopyTimer03 {
    public static void main(String[] args) {
        // copy01(); // 被淘汰！
        copy02();
        copy03();
        copy04();
    }

    /**（4）使用缓冲字节流：一个一个数组的复制。 */
    public static void copy04(){
        long startTimer = System.currentTimeMillis();
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\itcast\\班级\\Java就业113期\\就业班-day09-字节流、字符流\\12.字符输入流.wmv"));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\itcast\\04视频.wmv"));
        ){
            // 定义一个变量存储一个字节
            int len = 0 ;
            byte[] buffer = new byte[1024];
            while((len = bis.read(buffer))!=-1){
                bos.write(buffer,0,len);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTimer = System.currentTimeMillis();
        System.out.println("缓冲流一个一个字节数组复制："+ (endTimer - startTimer) / 1000.0+"s");
    }


    /**（3）使用缓冲字节流：一个一个字节的复制。 */
    public static void copy03(){
        long startTimer = System.currentTimeMillis();
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\itcast\\班级\\Java就业113期\\就业班-day09-字节流、字符流\\12.字符输入流.wmv"));
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:\\itcast\\03视频.wmv"));
        ){
            // 定义一个变量存储一个字节
            int bt = 0;
            while((bt = bis.read())!= -1){
                bos.write(bt);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTimer = System.currentTimeMillis();
        System.out.println("缓冲流一个一个字节复制："+ (endTimer - startTimer) / 1000.0+"s");
    }

    /**（2）使用低级字节流：一个一个数组的复制。 */
    public static void copy02(){
        long startTimer = System.currentTimeMillis();
        try(
                InputStream is = new FileInputStream("D:\\itcast\\班级\\Java就业113期\\就业班-day09-字节流、字符流\\12.字符输入流.wmv");
                OutputStream os = new FileOutputStream("D:\\itcast\\02视频.wmv")
        ){
            // 定义一个变量存储一个字节
            int len = 0 ;
            byte[] buffer = new byte[1024];
            while((len = is.read(buffer))!=-1){
                os.write(buffer,0,len);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTimer = System.currentTimeMillis();
        System.out.println("字节流一个一个字节数组复制："+ (endTimer - startTimer) / 1000.0+"s");
    }


    /**（1）使用低级字节流：一个一个字节的复制。 */
    public static void copy01(){
        long startTimer = System.currentTimeMillis();
        try(
                InputStream is = new FileInputStream("D:\\itcast\\班级\\Java就业113期\\就业班-day09-字节流、字符流\\12.字符输入流.wmv");
                OutputStream os = new FileOutputStream("D:\\itcast\\01视频.wmv")
                ){
              // 定义一个变量存储一个字节
            int bt = 0;
            while((bt = is.read())!= -1){
                os.write(bt);
            }

        }catch (Exception e){
            e.printStackTrace();
        }
        long endTimer = System.currentTimeMillis();
        System.out.println("字节流一个一个字节复制："+ (endTimer - startTimer) / 1000.0+"s");
    }
}

